//方案一：

// 防抖动函数(用于监听比较耗性能的函数监听)
function debounce(func, wait, immediate) {
  wait= wait || 250;
  var timeout;
  return function() {
    var context = this, args = arguments;
    var later = function() {
      timeout = null;
      if (!immediate) func.apply(context, args);
    };
    var callNow = immediate & !timeout;
    clearTimeout(timeout);
    timeout = setTimeout(later, wait);
    if (callNow) func.apply(context, args);
  };
};

//启动监听对象（滚动到最顶部 和 滚动到最底部）
var listenerScroll= {
  toBottom: function(target, fun, wait, immediate){
    //fun为触发执行函数
    //target为监听的对象
    //fun为触发执行函数
    //wait为触发等待时间
    $(target).on("scroll", debounce(()=>{
      var scrollTop = $(window).scrollTop(),
          scrollHeight = $(document).height(),
          windowHeight = $(window).height();
      if( scrollTop + windowHeight >= scrollHeight- 20 ){//此处故意留了20px的盲区（即允许误差范围20px以内也可触发执行函数）
        fun();
      }
    }, wait, immediate));
  },
  toTop: function(target, fun, wait, immediate){
    //target为监听的对象
    //fun为触发执行函数
    //wait为触发等待时间
    $(target).on("scroll", debounce(()=>{
      if( $(window).scrollTop()== 0 ){
        fun();
      }
    }, wait, immediate));
  }
}




// 方案二：

// 方案三：
